home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1997 #3
/
Amiga Plus CD - 1997 - No. 03.iso
/
pd
/
programmierung
/
alienbreed3d2_src
/
cheesesauce
/
streplayv2.4.s
< prev
next >
Wrap
Text File
|
1997-01-31
|
8KB
|
422 lines
;-----------------------------------------------------------------------;
; SOUNDTRACKER V2.4 REPLAYER ;
;CONSISTS OF: ;
;ONE ST-REPLAY-ROUTINE ;
; THIS PROGRAMM WAS FIXED ON 13/04/91 BY MR.BASE/FLASHING BYTES ;
; © 1991 BY FLASHING BYTES DEVELOPMENTS. ;
; THIS SOURCECODE IS ONLY FOR TFB-MEMBERS! ;
;-----------------------------------------------------------------------;
;-------------------------------NACHLADEN--------------------------------
;-------------------------BEGINN DES PROGRAMMES--------------------------
SECTION banana,CODE_C
start: MOVEM.L D0-D7/A0-A6,-(A7)
MOVE.B #02,$BFE001
move.l $6c,oldirq+2 ;IRQ starten (Level 3)
move.l #newirq,$6c
jsr mt_init
Wait: btst #6,$bfe001
bne.s Wait
jsr mt_end
move.l oldirq+2,$6c ;Alten IRQ restaurieren
moveq #0,d0
sub.l a0,a0
sub.l a1,a1
MOVE.B #00,$BFE001
MOVEM.L (A7)+,D0-D7/A0-A6
rts
;-------------------------------EIGENER IRQ------------------------------
newirq: movem.l d0-d7/a0-a6,-(sp)
jsr mt_music
movem.l (sp)+,d0-d7/a0-a6
oldirq: jmp $0
;--------------------------MUSIK INITIALISIEREN--------------------------
mt_init:lea MT_DATA,a0
add.l #$03b8,a0
moveq #$7f,d0
moveq #0,d1
mt_init1:
move.l d1,d2
subq.w #1,d0
mt_init2:
move.b (a0)+,d1
cmp.b d2,d1
bgt.s mt_init1
dbf d0,mt_init2
addq.b #1,d2
mt_init3:
lea MT_DATA,a0
lea mt_sample1(pc),a1
asl.l #8,d2
asl.l #2,d2
add.l #$438,d2
add.l a0,d2
moveq #$1e,d0
mt_init4:
move.l d2,(a1)+
moveq #0,d1
move.w 42(a0),d1
asl.l #1,d1
add.l d1,d2
add.l #$1e,a0
dbf d0,mt_init4
lea mt_sample1(PC),a0
moveq #0,d0
mt_clear:
move.l (a0,d0.w),a1
clr.l (a1)
addq.w #4,d0
cmp.w #$7c,d0
bne.s mt_clear
clr.w $dff0a8
clr.w $dff0b8
clr.w $dff0c8
clr.w $dff0d8
clr.l mt_partnrplay
clr.l mt_partnote
clr.l mt_partpoint
move.b MT_DATA+$3b6,mt_maxpart+1
rts
;----------------------------MUSIK AUSSCHLALTEN--------------------------
mt_end: clr.w $dff0a8
clr.w $dff0b8
clr.w $dff0c8
clr.w $dff0d8
move.w #$f,$dff096
rts
;------------------------------MUSIK ABSPIELEN---------------------------
mt_music:
addq.w #1,mt_counter
mt_cool:cmp.w #6,mt_counter
bne.s mt_notsix
clr.w mt_counter
bra mt_rout2
mt_notsix:
lea mt_aud1temp(PC),a6
tst.b 3(a6)
beq.s mt_arp1
lea $dff0a0,a5
bsr.s mt_arprout
mt_arp1:lea mt_aud2temp(PC),a6
tst.b 3(a6)
beq.s mt_arp2
lea $dff0b0,a5
bsr.s mt_arprout
mt_arp2:lea mt_aud3temp(PC),a6
tst.b 3(a6)
beq.s mt_arp3
lea $dff0c0,a5
bsr.s mt_arprout
mt_arp3:lea mt_aud4temp(PC),a6
tst.b 3(a6)
beq.s mt_arp4
lea $dff0d0,a5
bra.s mt_arprout
mt_arp4:rts
mt_arprout:
move.b 2(a6),d0
and.b #$0f,d0
tst.b d0
beq mt_arpegrt
cmp.b #$01,d0
beq.s mt_portup
cmp.b #$02,d0
beq.s mt_portdwn
cmp.b #$0a,d0
beq.s mt_volslide
rts
mt_portup:
moveq #0,d0
move.b 3(a6),d0
sub.w d0,22(a6)
cmp.w #$71,22(a6)
bpl.s mt_ok1
move.w #$71,22(a6)
mt_ok1: move.w 22(a6),6(a5)
rts
mt_portdwn:
moveq #0,d0
move.b 3(a6),d0
add.w d0,22(a6)
cmp.w #$538,22(a6)
bmi.s mt_ok2
move.w #$538,22(a6)
mt_ok2: move.w 22(a6),6(a5)
rts
mt_volslide:
moveq #0,d0
move.b 3(a6),d0
lsr.b #4,d0
tst.b d0
beq.s mt_voldwn
add.w d0,18(a6)
cmp.w #64,18(a6)
bmi.s mt_ok3
move.w #64,18(a6)
mt_ok3: move.w 18(a6),8(a5)
rts
mt_voldwn:
moveq #0,d0
move.b 3(a6),d0
and.b #$0f,d0
sub.w d0,18(a6)
bpl.s mt_ok4
clr.w 18(a6)
mt_ok4: move.w 18(a6),8(a5)
rts
mt_arpegrt:
move.w mt_counter(PC),d0
cmp.w #1,d0
beq.s mt_loop2
cmp.w #2,d0
beq.s mt_loop3
cmp.w #3,d0
beq.s mt_loop4
cmp.w #4,d0
beq.s mt_loop2
cmp.w #5,d0
beq.s mt_loop3
rts
mt_loop2:
moveq #0,d0
move.b 3(a6),d0
lsr.b #4,d0
bra.s mt_cont
mt_loop3:
moveq #$00,d0
move.b 3(a6),d0
and.b #$0f,d0
bra.s mt_cont
mt_loop4:
move.w 16(a6),d2
bra.s mt_endpart
mt_cont:
add.w d0,d0
moveq #0,d1
move.w 16(a6),d1
and.w #$fff,d1
lea mt_arpeggio(PC),a0
mt_loop5:
move.w (a0,d0),d2
cmp.w (a0),d1
beq.s mt_endpart
addq.l #2,a0
bra.s mt_loop5
mt_endpart:
move.w d2,6(a5)
rts
mt_rout2:
lea MT_DATA,a0
move.l a0,a3
add.l #$0c,a3
move.l a0,a2
add.l #$3b8,a2
add.l #$43c,a0
move.l mt_partnrplay(PC),d0
moveq #0,d1
move.b (a2,d0),d1
asl.l #8,d1
asl.l #2,d1
add.l mt_partnote(PC),d1
move.l d1,mt_partpoint
clr.w mt_dmacon
lea $dff0a0,a5
lea mt_aud1temp(PC),a6
bsr mt_playit
lea $dff0b0,a5
lea mt_aud2temp(PC),a6
bsr mt_playit
lea $dff0c0,a5
lea mt_aud3temp(PC),a6
bsr mt_playit
lea $dff0d0,a5
lea mt_aud4temp(PC),a6
bsr mt_playit
move.w #$01f4,d0
mt_rls: dbf d0,mt_rls
move.w #$8000,d0
or.w mt_dmacon,d0
move.w d0,$dff096
lea mt_aud4temp(PC),a6
cmp.w #1,14(a6)
bne.s mt_voice3
move.l 10(a6),$dff0d0
move.w #1,$dff0d4
mt_voice3:
lea mt_aud3temp(PC),a6
cmp.w #1,14(a6)
bne.s mt_voice2
move.l 10(a6),$dff0c0
move.w #1,$dff0c4
mt_voice2:
lea mt_aud2temp(PC),a6
cmp.w #1,14(a6)
bne.s mt_voice1
move.l 10(a6),$dff0b0
move.w #1,$dff0b4
mt_voice1:
lea mt_aud1temp(PC),a6
cmp.w #1,14(a6)
bne.s mt_voice0
move.l 10(a6),$dff0a0
move.w #1,$dff0a4
mt_voice0:
move.l mt_partnote(PC),d0
add.l #$10,d0
move.l d0,mt_partnote
cmp.l #$400,d0
bne.s mt_stop
mt_higher:
clr.l mt_partnote
addq.l #1,mt_partnrplay
moveq #0,d0
move.w mt_maxpart(PC),d0
move.l mt_partnrplay(PC),d1
cmp.l d0,d1
bne.s mt_stop
clr.l mt_partnrplay
mt_stop:tst.w mt_status
beq.s mt_stop2
clr.w mt_status
bra.s mt_higher
mt_stop2:
rts
mt_playit:
move.l (a0,d1.l),(a6)
addq.l #4,d1
moveq #0,d2
move.b 2(a6),d2
and.b #$f0,d2
lsr.b #4,d2
move.b (a6),d0
and.b #$f0,d0
or.b d0,d2
tst.b d2
beq.s mt_nosamplechange
moveq #0,d3
lea mt_samples(PC),a1
move.l d2,d4
asl.l #2,d2
mulu #$1e,d4
move.l (a1,d2),4(a6)
move.w (a3,d4.l),8(a6)
move.w 2(a3,d4.l),18(a6)
move.w 4(a3,d4.l),d3
tst.w d3
beq.s mt_displace
move.l 4(a6),d2
add.l d3,d2
move.l d2,4(a6)
move.l d2,10(a6)
move.w 6(a3,d4.l),8(a6)
move.w 6(a3,d4.l),14(a6)
move.w 18(a6),8(a5)
bra.s mt_nosamplechange
mt_displace:
move.l 4(a6),d2
add.l d3,d2
move.l d2,10(a6)
move.w 6(a3,d4.l),14(a6)
move.w 18(a6),8(a5)
mt_nosamplechange:
move.w (a6),d0
and.w #$fff,d0
tst.w d0
beq.s mt_retrout
move.w (a6),16(a6)
move.w 20(a6),$dff096
move.l 4(a6),(a5)
move.w 8(a6),4(a5)
move.w (a6),d0
and.w #$fff,d0
move.w d0,6(a5)
move.w 20(a6),d0
or.w d0,mt_dmacon
mt_retrout:
tst.w (a6)
beq.s mt_nonewper
move.w (a6),22(a6)
mt_nonewper:
move.b 2(a6),d0
and.b #$0f,d0
cmp.b #$0b,d0
beq.s mt_posjmp
cmp.b #$0c,d0
beq.s mt_setvol
cmp.b #$0d,d0
beq.s mt_break
cmp.b #$0e,d0
beq.s mt_setfil
cmp.b #$0f,d0
beq.s mt_setspeed
rts
mt_posjmp:
not.w mt_status
moveq #0,d0
move.b 3(a6),d0
subq.b #1,d0
move.l d0,mt_partnrplay
rts
mt_setvol:
move.b 3(a6),8(a5)
rts
mt_break:
not.w mt_status
rts
mt_setfil:
moveq #0,d0
move.b 3(a6),d0
and.b #1,d0
rol.b #1,d0
and.b #$fd,$bfe001
or.b d0,$bfe001
rts
mt_setspeed:
move.b 3(a6),d0
and.b #$0f,d0
beq.s mt_back
clr.w mt_counter
move.b d0,mt_cool+3
mt_back:rts
mt_aud1temp:
dcb.w 10,0
dc.w 1
dcb.w 2,0
mt_aud2temp:
dcb.w 10,0
dc.w 2
dcb.w 2,0
mt_aud3temp:
dcb.w 10,0
dc.w 4
dcb.w 2,0
mt_aud4temp:
dcb.w 10,0
dc.w 8
dcb.w 2,0
mt_partnote: dc.l 0
mt_partnrplay: dc.l 0
mt_counter: dc.w 0
mt_partpoint: dc.l 0
mt_samples: dc.l 0
mt_sample1: dcb.l 31,0
mt_maxpart: dc.w 0
mt_dmacon: dc.w 0
mt_status: dc.w 0
mt_arpeggio:
dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c
dc.w $023a,$021a,$01fc,$01e0,$01c5,$01ac,$0194,$017d
dc.w $0168,$0153,$0140,$012e,$011d,$010d,$00fe,$00f0
dc.w $00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097
dc.w $008f,$0087,$007f,$0078,$0071,$0000,$0000,$0000
MT_DATA: incbin "work:andy's_tunes/twochantrack"